/*
*	Ivan Concua 12352
*	Roberto Andrino 12413
*	Algoritmos y estructuras de datos
*	ListFactory.java
*	ListFactory crea una lista que hereda de AbstractList y la retorna.
*	Se usa el patron Singleton para asegurarse de que solo hay una lista.
*	Se usa el patron Factory para crear una distinta implementacion de List
*	segun lo que el usuario escoja
*/

public class ListFactory<G>
{
	// selecciona la implementacion a usar para una pila
	// se utiliza el patron Factory y Singleton
	
	private static boolean instanceFlag = false;
	
	public Stack<G> getStack(String entry) throws SingletonException
	// seleccion de la implementacion a usar
	{
		if(instanceFlag) // instanceFlag indica si ya se creo un Stack
			throw new SingletonException("Error: solo se permite una lista.");
		
		else
		{
			setInstanceFlag();
			
			// se regresa un distinto Stack dependiendo de lo que escoja el usuario
			if(entry.equals("3"))
				return new SinglyLinkedList<G>();
			
			else if(entry.equals("4"))
				return new DoublyLinkedList<G>();
				
			else
				return new CircularList<G>();
		}
	}
	
	public void setInstanceFlag()
	// se usa despues de que el usuario crea un Stack o una List
	{
		instanceFlag = true;
	}
}
